package yun1.ch3;

/**
 * 思路：从前开始遍历字符串
 *    若是字符，直接拼接在结果中
 *    若是数字，考虑数字可能大于9，需要将字符转换十进制数
 *    若是[，  或者是], 略过
 *    如何获取字串：获取不到，
 * @author sjxy
 * 
 * abc3[cd]xyz
 * f(i):求解码的字符串的 i=1，表示第一调用f方法
 * f(1) i=0
 * f(2) i=5
 * f(3) i=10
 * 
 * 我们记住了每次递归该传递的字符的位置
 * 
 * 需要我们将i 声明为  全局变量
 */

public class DecodingString {
	
	//类变量（全局）
	static int i;

	public static void main(String[] args) {
		String s = "abc3[c4[pq5[hj]a]d]xyz"; 
		String s2 = decodingString(s);
		System.out.println(s2);
	}

	private static String decodingString(String s) {
		int i =0;
		String s2 = unfold(s);
		return s2;
	}

	
	//abc3[c4[oiui5[fd6[nmnmnm]fd]uoiu]d]xyz  abc1[cd4[pq]ef]xyz
	private static String unfold(String s) {
		String ans = "";//存放最终结果
		//字符型char可以直接参与算数运算
		while(i<s.length() && s.charAt(i) != ']') {
			if(s.charAt(i)>='a' && s.charAt(i) <='z') {
				ans += s.charAt(i++);
			}else {//非字母的情况
				int k=0;
				while(i<s.length() && s.charAt(i)>='0' && s.charAt(i)<='9') {
					k=k*10 + (s.charAt(i++) - '0');
				}//计算完成[ 之前的数字
				i++;//跳过【
				String tmp = unfold(s);
				i++;//跳过】
				//拼接【】内部的内容k次
				while(k>0) {
					ans+=tmp;
					k--;
				}
			}
		}		
		return ans;
	}
}
